﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SIPDTO;


namespace SIPDAL
{
    public class mgPersonas
    {
        /// <summary>
        /// Declaracion de Variables
        /// </summary>
        SIPDataContext _dc = new SIPDataContext();
        dtoError _resp = new dtoError();
        tblPersona _tbpersona = new tblPersona();
        List<dtoPersonas> _lpersona = new List<dtoPersonas>();

        /// <summary>
        /// Constructor de la clase
        /// </summary>
        public mgPersonas()
        {
            
        }

        /// <summary>
        /// Metodo para el registro y modificación de personas
        /// </summary>
        /// <param name="pers"></param>
        /// <returns></returns>
        public dtoError Registrar_Persona(dtoPersonas pers,int evento)
        {
            _tbpersona.identificacion = pers.Identificacion;
            _tbpersona.tipo_identificacion = pers.TipoIdentificacion; 
            _tbpersona.nombre = pers.Nombre;
            _tbpersona.apellido1 = pers.Apellido1;
            _tbpersona.apellido2 = pers.Apellido2;
            _tbpersona.direccion = pers.Direccion;
            _tbpersona.telefono =  pers.Telefono;
            _tbpersona.sexo = pers.Sexo;
            _tbpersona.fecha_nacimiento  = Convert.ToDateTime(pers.FechaNacimiento);
          
            try
            {
                _resp = Existe_Persona(pers);
                if ((_resp.IdError == -101) &&(evento ==1))
                {
                    _dc.tblPersonas.InsertOnSubmit(_tbpersona);
                    _dc.SubmitChanges();
                    _resp.Mensaje = "Información guardada correctamente.";
                    _resp.IdError = 100;

                }
                if ((_resp.IdError == 101) && (evento == 1))
                {
                    _resp.Mensaje = "La información del feligres ya se encuentra registrada.";
                    _resp.IdError = -100;
                }
                else if ((_resp.IdError == 101) && (evento == 2)) // Se modifica los registros del feligres
                {
                    var condicion = (from p in _dc.tblPersonas
                                     where p.identificacion == pers.Identificacion &&
                                     p.tipo_identificacion == pers.TipoIdentificacion
                                     select p).ToList();

                    foreach (tblPersona _reg in condicion)
                    {
                        _reg.direccion = pers.Direccion;
                        _reg.telefono = pers.Telefono;
                        _dc.SubmitChanges();
                        _resp.Mensaje = "Información modificada correctamente.";
                        _resp.IdError = 100;
                    }
                }
                return _resp;
            }

            catch (Exception ex)
            {
                _resp.IdError = -100;
                _resp.Mensaje = ex.Message.ToString();
                return _resp;
                throw;
            }
            
        }


        /// <summary>
        /// Metodo para verificar la existencia de la persona en la tabla tblPersona
        /// </summary>
        /// <param name="pers"></param>
        /// <returns></returns>
        public dtoError Existe_Persona(dtoPersonas pers)
        {
            var condicion = (from p in _dc.tblPersonas
                             where p.identificacion == pers.Identificacion && p.tipo_identificacion == pers.TipoIdentificacion
                             select p).Count();          
            if (Convert.ToInt32(condicion.ToString()) > 0)
            {
                _resp.Mensaje = "Registro ya existe en la tabla de Personas";
                _resp.IdError = 101;

            }
            else
            {
                _resp.IdError = -101;
                _resp.Mensaje = "Registro no existe en la tabla de Personas";
            }
            return _resp;
        }

        /// <summary>
        /// Metodo para obtener el nombre y apellidos de la persona para devolver en el mantenimiento de Clérigos, Bautizos,
        /// Matrimonios, Confirma y Personas. La búsqueda se efectua por identificacion y tipo
        /// </summary>
        /// <param name="pers"></param>
        /// <returns></returns>
        public List<dtoPersonas> ObtenerPersona(dtoPersonas pers)
        {
            int i = 0;
            try
            {
                var condicion = (from p in _dc.tblPersonas
                                 where p.tipo_identificacion == pers.TipoIdentificacion && p.identificacion == pers.Identificacion 
                                 select p);

                foreach (tblPersona  reg in condicion)
                {
                    _lpersona.Add(new dtoPersonas());
                    _lpersona[i].Identificacion = reg.identificacion;
                    _lpersona[i].TipoIdentificacion = reg.tipo_identificacion;
                    _lpersona[i].Nombre = reg.nombre;
                    _lpersona[i].Apellido1 = reg.apellido1;
                    _lpersona[i].Apellido2 = reg.apellido2;
                    _lpersona[i].Telefono = reg.telefono;
                    _lpersona[i].Direccion = reg.direccion;
                    _lpersona[i].Sexo  = Convert.ToChar(reg.sexo);
                    _lpersona[i].FechaNacimiento  = Convert.ToDateTime(reg.fecha_nacimiento);
                  i++;
                }

            }
            catch (Exception ex)
            {
                throw new Exception("Ocurrió un error al obtener los datos " + ex.Message);
            }

            return _lpersona;
        }


        /// <summary>
        /// Metodo para obtener la lista de todas las personas que se mostrarán para cargar el grid
        /// </summary>
        /// <param></param>
        /// <returns></returns>
        public List<dtoPersonas> ObtenerTodasPersonas() // 
        {
            int i = 0;
            try
            {
                var vlaico = (from p in _dc.tblPersonas
                                  select p).ToList();

                    foreach (tblPersona pers in vlaico)
                    {
                        _lpersona.Add(new dtoPersonas());
                        _lpersona[i].TipoIdentificacion = pers.tipo_identificacion;
                        _lpersona[i].Identificacion = pers.identificacion;
                        _lpersona[i].Nombre = pers.nombre;
                        _lpersona[i].Apellido1 = pers.apellido1;
                        _lpersona[i].Apellido2 = pers.apellido2;
                        _lpersona[i].Telefono = pers.telefono;
                        _lpersona[i].Direccion = pers.direccion;
                        i++;
                    }
            }
            catch (Exception ex)
            {
                throw new Exception("No se pudo recuperar la informacion. " + ex.Message);
            }

            return _lpersona;

        }

    }
}
